package com.cs.beneficios.web.action;

import com.cs.beneficios.business.model.AtributoVO;
import com.cs.beneficios.common.ConnectionFactory;
import com.cs.beneficios.common.entity.Consultas;
import com.cs.paoyer.administration.business.model.UserVO;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
import javax.servlet.http.HttpSession;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionMapping;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.struts.action.ActionForward;
//import org.apache.struts.action.ActionError;
//import org.apache.struts.action.ActionErrors;
import java.io.IOException;
import javax.servlet.ServletException;

public class InsertarAtriAdicionalesAction extends Action 
{
  /**
   * This is the main action called from the Struts framework.
   * @param mapping The ActionMapping used to select this instance.
   * @param form The optional ActionForm bean for this request.
   * @param request The HTTP Request we are processing.
   * @param response The HTTP Response we are processing.
   * @return 
   * @throws java.io.IOException
   * @throws javax.servlet.ServletException
   */
  public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException
  {
    //ConnectionFactory cf = new ConnectionFactory("beneficios","beneficios");
	ConnectionFactory cf = new ConnectionFactory();
    Consultas objCons = new Consultas(cf);
    try{
        HttpSession session = request.getSession();
        //Proceso para la auditoria
        UserVO user = (UserVO) session.getAttribute("userInfo");
        String terminalAddress = request.getRemoteAddr();
        String strTerminal = ("WEB="+terminalAddress);
        Calendar c = Calendar.getInstance(); 
        SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");   
        //Fin del proceso
        
        List lError = new LinkedList();
        Object Error = (Object)session.getAttribute("ListaError");
        if(Error != null)
        {
          lError = (List)session.getAttribute("ListaError");
        }
        
        String sub = (String)session.getAttribute("subprograma");
        
        List lNombre = (List)session.getAttribute("ListaNombre");
        List lConvertirGene = (List)session.getAttribute("ListaConvertir");
        List lCamposOblig = (List)session.getAttribute("ListaCamposObli");
            
        Object InsertAtri = (Object)session.getAttribute("ListaAtributos");
        Collection coInsertarAtri = new LinkedList();
        if(InsertAtri != null)
        {
          coInsertarAtri = (Collection)session.getAttribute("ListaAtributos");
        }
        
        
        AtributoVO objatri = null;
        for(int i=1;i<6;i++)
        {
           int sw = 0;
           List lComparacion = new LinkedList();
           
           //Proceso para validar los campos obligatorios
           Object obNombre = (Object)request.getParameter("nombre"+i);
           if(!obNombre.equals(""))
           {
             lComparacion.add(obNombre);
           }
           Object obOrden = (Object)request.getParameter("orden"+i);
           if(!obOrden.equals(""))
           {
             lComparacion.add(obOrden);
           }
           Object obEtiqueta = (Object)request.getParameter("etiqueta"+i);
           if(!obEtiqueta.equals(""))
           {
             lComparacion.add(obEtiqueta);
           }
           Object obDescrip = (Object)request.getParameter("descripcion"+i);
           if(!obDescrip.equals(""))
           {
             lComparacion.add(obDescrip);
           }
             
           int icomparacion = lComparacion.size();
           if(icomparacion==0 || icomparacion==4)
           {
              String strNombre = request.getParameter("nombre"+i);
              String strOrden = request.getParameter("orden"+i);
              String strEtiqueta = request.getParameter("etiqueta"+i); 
             
              if(!strOrden.equals("") && !strNombre.equals(""))
              {
                int iOrdenMin=Integer.valueOf(strOrden).intValue();
                if(iOrdenMin >299)
                {
                    Object obListaAtri = (Object)session.getAttribute("ListaAtributos");
                    Object obConvertir = (Object)request.getParameter("convertir"+i);
                    AtributoVO objAtriVO = null;
                    //valido que si es la primera vez no entre
                    if(obListaAtri!=null)
                    {
                       List lListaAtributos = (List)session.getAttribute("ListaAtributos");
                       int tamanolistaatri = lListaAtributos.size();
                       for(int j=0;j<tamanolistaatri;j++)
                       {
                          objAtriVO = (AtributoVO)lListaAtributos.get(j);
                          String strnomcom = objAtriVO.getNombre();
                          String strordencom = objAtriVO.getOrden();
                          // Proceso para validar que el orden y el nombre sean diferentes
                          if(strNombre.equals(strnomcom) || strOrden.equals(strordencom))
                          {
                             sw = 1;
                             session.setAttribute("Mostrar","3");
                             lError.add(strEtiqueta);
                             lError.add(strOrden);
                          }
                       }
                     }
                     // fin del proceso
                        
                     if(!strNombre.equalsIgnoreCase("") && sw==0)
                     {
                        objatri = new AtributoVO();
                        objatri.setTipoatributo(request.getParameter("tipo_atributo"+i));;
                        objatri.setNombre(request.getParameter("nombre"+i));
                        objatri.setOrden(request.getParameter("orden"+i));
                        objatri.setLongitud(request.getParameter("longitud"+i));
                        objatri.setObligatorio(request.getParameter("obligatorio"+i));
                        objatri.setEtiqueta(request.getParameter("etiqueta"+i));
                        objatri.setValLista(request.getParameter("validar_lista"+i));
                        objatri.setDescripcion(request.getParameter("descripcion"+i));
                        objatri.setTipodato(request.getParameter("tipo_dato"+i));
                            
                        coInsertarAtri.add(objatri);
                    
                        int Orden = objCons.getOrden(objatri.getOrden(),sub);
                        int Nomb = objCons.getNombre(objatri.getNombre(),sub);
                        int iLong = 0;
                        
                        if(Integer.parseInt(objatri.getLongitud().trim()) >500)
                        {
                          iLong = 1;
                        }
                         
                        if (Orden == 0 && Nomb == 0 && iLong == 0)
                        {
                           if(obConvertir!=null)
                           {
                             lConvertirGene.add(request.getParameter("nombre"+i));
                           }
                        }else
                        {
                           session.setAttribute("Mostrar","3");
                           Object obError = (Object)lError;
                           if(obError != null)
                           {
                              lError.add(objAtriVO.getEtiqueta());
                              lError.add(strOrden);  
                           }
                 
                         }
                     }
                      //envio la lista donde almaceno los atributos a ingresar
                      session.setAttribute("ListaAtributos",coInsertarAtri);
                }else
                {
                   session.setAttribute("Mostrar","3");
                   Object Errores = (Object)lError;
                   if(Errores==null)
                   {
                     lError = new LinkedList();
                   }
                   lError.add(strEtiqueta);
                   lError.add(strOrden);
                }
              }
           }else
           {
               session.setAttribute("Mostrar","3");
               session.setAttribute("TipoError","2");
               int sw1=0;
               if(!(request.getParameter("etiqueta"+i)).equals("") && sw1==0)
               {
                 lCamposOblig.add(request.getParameter("etiqueta"+i));
                 sw1=1;
               }
               if(!(request.getParameter("nombre"+i)).equals("") && sw1==0)
               {
                 lCamposOblig.add(request.getParameter("nombre"+i));
                 sw1=1;
               }
               if(!(request.getParameter("descripcion"+i)).equals("") && sw1==0)
               {
                 lCamposOblig.add(request.getParameter("descripcion"+i));
                 sw1=1;
               }
               if(!(request.getParameter("orden"+i)).equals("") && sw1==0)
               {
                 lCamposOblig.add(request.getParameter("orden"+i));
                 sw1=1;
               }
               
               session.setAttribute("ListaCamposObli",lCamposOblig);
           }
        }
        
        if((Object)coInsertarAtri != null)
        {
          // Proceso para insertar los atributos del subprograma
          int tamanolist = coInsertarAtri.size();
          if(tamanolist == 0)
          {
            //System.out.println("no hay atributos que insertar");
          }else
          {
            if(lError.size() == 0){
               List lLisAtri = (List)coInsertarAtri;
               AtributoVO objatributo = null;
               for (int i=0;i<tamanolist;i++)
               {
                  objatributo = (AtributoVO)lLisAtri.get(i);
                  String strNomespe= objatributo.getNombre();
                  int continuar = 0;
                  if(lError.size()>0)
                  {
                    int t = 0;
                    while(t < lError.size())
                    {
                      String nombre1 = (String)lError.get(t);
                      t+=2;
                      if(strNomespe.equals(nombre1))
                      {
                        continuar = 1;
                      }
                    }
                  }
                  
                  if(continuar == 0)
                  {
                    
                    
                    String strArr[] = {objatributo.getTipoatributo(),objatributo.getNombre().trim(),objatributo.getDescripcion().trim(),objatributo.getOrden(),
                                       objatributo.getTipodato(),objatributo.getLongitud(),objatributo.getObligatorio(),objatributo.getEtiqueta().trim(),objatributo.getValLista(),
                                       user.getName(), dateFormat.format(c.getTime()),strTerminal,user.getName(),dateFormat.format(c.getTime()),strTerminal};
                    lNombre.add(objatributo.getNombre());
                    int bInsertAtributo= objCons.InsertAtributo(strArr,sub);
                  }   
                  // Proceso para ingresar los atributos especificos que se convirtieron en generales
                  Object obConvertirEspGen = (Object)lConvertirGene;
                  if(obConvertirEspGen != null)
                  {
                     int tamanocon = lConvertirGene.size();
                     for(int k=0; k<tamanocon;k++)
                     {
                       String strNomconvertir = (String)lConvertirGene.get(k);
                       if(strNomespe.equals(strNomconvertir))
                       {
                          int iOrdenMax = objCons.getOrdenAtriGene();
                          String strOrdenGene=String.valueOf(iOrdenMax);
                          String strArrGen[] = {objatributo.getTipoatributo(),strNomespe.trim(),
                                                objatributo.getDescripcion().trim(),strOrdenGene,
                                                objatributo.getTipodato(),objatributo.getLongitud(),
                                                objatributo.getObligatorio(),objatributo.getEtiqueta().trim(),
                                                objatributo.getValLista(),
                                                user.getName(), dateFormat.format(c.getTime()),strTerminal,
                                                user.getName(),dateFormat.format(c.getTime()),strTerminal};
                          int bInsertAtributoGene= objCons.InsertAtributoGene(strArrGen);
                          List lCodsMaxAtri = (List)objCons.CodMaxAtriGene();
                          int CodAtriEspMax = Integer.valueOf((String)lCodsMaxAtri.get(0)).intValue();
                          int CodAtriGenMax = Integer.valueOf((String)lCodsMaxAtri.get(1)).intValue();
                          int ActualizoBienAtri = objCons.ActualizarCampoUno(CodAtriEspMax,CodAtriGenMax);
                       }
                     }
                  }             
                  // Fin del proceso
               }
            }
          }
          // Fin del Proceso
        }else
        {
          //System.out.println("No hay atributos que ingresar");
          // Creo que se debe de eliminar el subprograma
        }
          
         
         if (Error != null)
         {
           int iTamanoError = lError.size();
           if (iTamanoError != 0)
           {
              session.setAttribute("ListaError",lError);
           }
         }
         
        
         session.setAttribute("ListaNombre",lNombre);
         
         int iTamanoValidar=lNombre.size();
         if (iTamanoValidar!=0)
         {
            Collection val = objCons.getAtriValidarLista(lNombre,sub); 
            request.setAttribute("tamano",val.size()+"");
            request.setAttribute("dominios",val);
         }

     return mapping.findForward("success");
  }finally
  {
    try{
      cf.closeConnection(objCons.getConn());
    }catch(SQLException e)
    {
		System.err.println("/******** TDSUB - cwsub");
		e.printStackTrace();
		System.err.println("TDSUB - cwsub ********/");
    }
  }
  }
}     
     